创建内存表。
function Table->__construct(int $size, float $conflict_proportion = 0.2)
$size
参数指定表格的最大行数,如果$size
不是为2
的N次方,如1024
、8192
,65536
等,底层会自动调整为接近的一个数字,如果小于1024则默认成1024,即1024是最小值table
占用的内存总数为 (结构体长度 + KEY长度64字节 + 行尺寸$size
) * (1.2预留20%作为hash冲突) * (列尺寸),如果机器内存不足table会创建失败set
操作能存储的最大行数与$size
正相关,但不完全一致,如$size
为1024实际可存储的行数小于1024
Table
基于行锁,所以单次set/get/del
在多线程/多进程的环境下是安全的
set/get/del
等方法是原子操作,用户代码中不需要担心数据加锁和同步的问题
Table
底层是建立在共享内存之上的HashTable
数据结构。$size
最大行数,决定了HashTable
的总行数。由于Table
是在共享内存之上,所以无法动态扩容。这个$size
必须在创建前设置好。
Table
能存储的总数据行数,取决于数据的Key
冲突率。如果冲突率超过20%
,预留的hash
冲突内存块容量不足,就会报Unable to allocate memory
错误,并返回false
,存储失败。